package com.atguigu.study.controller;

import cn.hutool.core.codec.Base64Encoder;
import dev.langchain4j.data.message.ImageContent;
import dev.langchain4j.data.message.TextContent;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.openai.OpenAiChatModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.Base64;

/**
 * @author Marco
 * @Description   上传指定的图片给 “千问大模型” ，可以结合文本描述生成相应结果
 * @date 2025/8/18 23:31
 * @email 3293336923@qq.com
 */
@Slf4j
@RestController
public class ImageModelController {


    @Autowired
    private ChatModel  chatModel;

    @Value("classpath:static/images/days.png")
    private Resource    resource;

    @GetMapping("/image/call")
     public       String       readImageContent() throws IOException {

//        1、图片 进行转码： 通过 base64 编码 将图片 转换为字符串
        byte[] contentAsByteArray = resource.getContentAsByteArray();
        String base64Data = Base64Encoder.encode(contentAsByteArray);

//        2、提示词指定：结合 ImageContent  和   TextContent 一起发送到大模型进行处理
        UserMessage userMessage = UserMessage.from(
                ImageContent.from(base64Data, "image/png"),
                TextContent.from("请给我解析一下这个程序")
        );
//        3、API调用：使用 OpenAiChatModel 来构建请求，通用 chat 方法 调用 大模型 进行处理请求
        ChatResponse chatResponse = chatModel.chat(userMessage);
//        4、解析和输出:  从 chatResponse 中获取AI 大模型的回复，打印处理后的结果
        String result = chatResponse.aiMessage().text();
//        后台打印
        log.info("result:{}",result);
//        前台打印

        return  result;
     }
}
